import { marked } from 'marked'
import { getViews, incrementViews } from './viewsService.js'

// 文章数据存储
let articlesCache = null

// 文章图标映射
const iconMap = {
  '系统': '💻',
  '字节码': '⚡',
  '机器码': '🔧',
  '面试': '📝',
  'java': '☕',
  'vue': '💚',
  '前端': '🎨',
  '后端': '⚙️',
  '全栈': '🚀',
  '工具': '🛠️',
  '设计': '🎯'
}

// 从文件名提取分类和标签
function extractMetaFromFilename(filename) {
  const name = filename.replace('.md', '')
  
  // 根据文件名判断分类
  let category = '技术'
  let tags = []
  
  if (name.includes('SystemInfo') || name.includes('系统')) {
    category = 'Java'
    tags = ['Java', '系统信息', 'oshi']
  } else if (name.includes('字节码')) {
    category = 'Java'
    tags = ['Java', '字节码', 'JVM']
  } else if (name.includes('机器码')) {
    category = '计算机原理'
    tags = ['计算机原理', '机器码', 'CPU']
  } else if (name.includes('面试')) {
    category = '面试'
    tags = ['面试', 'Java', '知识点']
  }
  
  return { category, tags }
}

// 从文件名生成标题
function generateTitleFromFilename(filename) {
  // 移除.md扩展名
  let title = filename.replace('.md', '')
  
  // 移除常见的说明后缀
  title = title.replace('说明', '')
  
  return title
}

// 从Markdown内容提取摘要
function extractExcerptFromContent(content) {
  const lines = content.split('\n')
  let excerpt = ''
  
  // 提取摘要（前几行非标题内容）
  for (const line of lines) {
    const trimmedLine = line.trim()
    if (trimmedLine && !trimmedLine.startsWith('#') && !trimmedLine.startsWith('```')) {
      excerpt = trimmedLine
      break
    }
  }
  
  // 生成更简洁的摘要，避免与文章内容重复
  if (excerpt.length > 80) {
    // 截取前80个字符，并确保在句号或逗号处截断
    let shortExcerpt = excerpt.substring(0, 80)
    const lastPunctuation = Math.max(shortExcerpt.lastIndexOf('。'), shortExcerpt.lastIndexOf('，'), shortExcerpt.lastIndexOf('.'))
    
    if (lastPunctuation > 40) {
      shortExcerpt = shortExcerpt.substring(0, lastPunctuation + 1)
    }
    
    excerpt = shortExcerpt + '...'
  }
  
  return excerpt
}

// 获取文章列表
export async function getArticles() {
  try {
    // 动态导入Article文件夹中的所有Markdown文件作为文本
    const articleModules = import.meta.glob('/Article/*.md', { 
      eager: true, 
      as: 'raw' 
    })
    
    const articles = []
    let id = 1
    
    for (const [path, content] of Object.entries(articleModules)) {
      const filename = path.split('/').pop()
      
      // 从文件名提取元数据
      const { category, tags } = extractMetaFromFilename(filename)
      
      // 使用文件名作为标题
      const title = generateTitleFromFilename(filename)
      
      // 从内容提取摘要
      const excerpt = extractExcerptFromContent(content)
      
      // 生成文章对象
      const article = {
        id: id++,
        filename,
        title,
        excerpt,
        content,
        category,
        tags,
        date: new Date().toISOString().split('T')[0], // 使用当前日期
        readTime: Math.ceil(content.length / 500), // 估算阅读时间
        icon: iconMap[category] || '📄',
        views: getViews(filename) // 从txt文件读取真实浏览量
      }
      
      articles.push(article)
    }
    
    // 按日期排序（最新的在前）
    articles.sort((a, b) => new Date(b.date) - new Date(a.date))
    
    articlesCache = articles
    return articles
    
  } catch (error) {
    console.error('获取文章列表失败:', error)
    return []
  }
}

// 根据ID获取单篇文章
export async function getArticleById(id) {
  const articles = await getArticles()
  const article = articles.find(article => article.id === parseInt(id))
  
  // 增加阅读量（每次访问都增加）
  if (article) {
    const newViews = incrementViews(article.filename)
    // 更新缓存中的阅读量
    article.views = newViews
    
    console.log(`文章 "${article.title}" 阅读量已更新: ${newViews}`)
  }
  
  return article
}

// 获取分类列表
export async function getCategories() {
  const articles = await getArticles()
  const categories = ['全部', ...new Set(articles.map(article => article.category))]
  return categories
}

// 获取相关文章
export async function getRelatedArticles(currentArticleId, limit = 2) {
  const articles = await getArticles()
  const currentArticle = articles.find(article => article.id === currentArticleId)
  
  if (!currentArticle) return []
  
  return articles
    .filter(article => 
      article.id !== currentArticleId && 
      article.category === currentArticle.category
    )
    .slice(0, limit)
}

// 清除缓存（用于开发时的热更新）
export function clearCache() {
  articlesCache = null
}
